/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fait.ferm.persists;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Date;

/**
 *
 * @author alex
 */
public final class Game extends PersistsObject {
	/**
	 * Пользователь
	 */
	public int user_id;
	/**
	 * имя игры
	 */
	public String name;
	/**
	 * текущая дата
	 */
	public Date current_date;
	/**
	 * Количество денег на расчетном счете
	 */
	public double pc;
	//private String table = "ferm";
	
	/**
	 * Создается  пустой объект, которого нет в БД
	 * @param con Соединение с БД
	 */
	public Game(){
		super();
		table = "game";
		user_id=-1;
		current_date = null;
		name = "";
	}
	/**Создается объект из БД по id. Данные загружаются из БД
	 * @param pc Соединение с БД
	 * @param pid id фермы
	 * @throws Exception
	 */
	public Game( int pid) throws Exception {
		super(pid);
		table = "game";
		load();
	}
	

	/**
	 * Загружает параметры фермы из БД, если id > 0
	 * @throws Exception
	 */
	@Override
	public void load() throws Exception {
		boolean notSuccessfully=true;
		if(id==-1) {
			throw new Exception("Игра не загружена");
		}	
		try (Statement st = con.createStatement()) {
			String q = "SELECT user_id, [current_date], name FROM "+table+" WHERE id = " + id;
			ResultSet rs = st.executeQuery(q);
			if(rs.next()){
				notSuccessfully=false;
				user_id = rs.getInt("user_id");
				name = rs.getString("name");
				current_date = java.sql.Date.valueOf( rs.getString("current_date"));
			}
			rs.close();
		}
		if(notSuccessfully) {
			throw new Exception("GAme не загружена");
		}	
	}
	/**
	 * Загружает параметры игры из БД, по имени и пользователю
	 * @throws Exception
	 */
	public void load(String gName, int userId) throws Exception {
		boolean notSuccessfully=true;
		if(userId==-1) {
			throw new Exception("Игра не загружена");
		}	
		try (Statement st = con.createStatement()) {
			String q = "SELECT id, current_date FROM "+table+" WHERE user_id = " + userId +
					" AND name ='"+ gName +"'";
			ResultSet rs = st.executeQuery(q);
			if(rs.next()){
				notSuccessfully=false;
				setId(rs.getInt("id"));
				user_id = userId;
				name = gName;
				current_date = Date.valueOf(rs.getString("current_date"));
			}
			rs.close();
		}
		if(notSuccessfully) {
			throw new Exception("GAme не загружена");
		}	
	}

	/**
	 * Обновляет параметры фермы в БД
	 * @throws SQLException
	 */
	@Override
	protected void update() throws SQLException {
		try (Statement st = con.createStatement()) {
			String q = "UPDATE "+table+" SET current_date='"+current_date.toString()+"', user_id="+user_id+ 
					", name ='" + name +"' "+
					"WHERE id="+id;
			st.executeUpdate(q);
		}

	}

	/**
	 * Создает новую запись в БД с параметрами объекта. 
	 * При этом генерируется новый id фермы
	 * @throws SQLException
	 */
	@Override
	protected void createNew() throws SQLException {
		try (Statement st = con.createStatement()) {
			String q = "INSERT INTO "+table+" ( user_id, current_date, name) VALUES("+
					user_id + ","+
					"'"+current_date.toString()+"'," +
					"'"+name+"'"+
					") ";
			st.executeUpdate(q);
			q="SELECT seq FROM sqlite_sequence WHERE name = '"+table+"'";
			ResultSet rs = st.executeQuery(q);
			if(rs.next()){
				id = rs.getInt("seq");
			}
			rs.close();
		}
	
	}
	@Override
	public String toString(){
		return String.valueOf(id);
	}	
	
	
}
